#※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
# File Name: log.sh
# Author: GID5564
# Description: 日志
# Created Time: 06/11/23-20:18:14
#※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
#! /usr/bin/env bash

# 避免重复导入
#[[ -n $__XLIB_IMPORTED__LOG ]] && return 0
#__XLIB_IMPORTED__LOG=1



function __log_init__() {

    #设置日志数据格式(系统日志)
    export LOGDATEFORMAT="%FT%T%z"
    #设置启用日志时要使用的日志文件。
    export LOG_FILE="$0.log"

    #要与syslog一起使用的标记。
    export SYSLOG_TAG="$0"
}


########################################
# 描述: 使用syslog记录消息
# 参数: $1:要记录的消息
# 注: 日志保存目录:/var/log/syslog
# 实例: to_syslog <msg>
########################################
function to_syslog() {
    if option_enabled  SYSLOG_ENABLED; then
        local MESSAGE="$1"
        logger -t "$SYSLOG_TAG" " $MESSAGE" # The space is not a typo!
    fi
}


########################################
# 描述: 将消息写入日志文件或syslog
# 参数: $1:要记录的消息，$2:消息状态
# 实例: log <msg> <status>
########################################
function log() {
    if option_enabled LOG_ENABLED || option_enabled SYSLOG_ENABLED; then
        local LOG_MESSAGE="$1"
        local STATE="$2"
        local DATE=$(date +"$LOGDATEFORMAT")

        if has_value LOG_MESSAGE; then
            local LOG_STRING="$DATE $STATE - $LOG_MESSAGE"
        else
            local LOG_STRING="$DATE -- empty log message, no input received --"
        fi

        if option_enabled LOG_ENABLED; then
            echo "$LOG_STRING" >> "$LOG_FILE"
        fi

        if option_enabled SYSLOG_ENABLED; then
            # Syslog already prepends a date/time stamp so only the message
            # is logged.
            to_syslog "$LOG_MESSAGE"
        fi
    fi
}

########################################
# 描述: 日志消息的格式为状态优先于内容
# 参数: $1:要记录的消息，$2:消息状态
# 实例: log_status <msg> <status>
########################################
log_status() {
    if option_enabled LOG_ENABLED; then
        local MESSAGE="$1"
        local STATUS="$2"

        log "$MESSAGE" "$STATUS"
    fi
}

########################################
# 描述: 记录一条状态为“紧急”的消息
# 参数: $1:要记录的消息
# 实例: log_emergency <msg> 
########################################
log_emergency() {
    local MESSAGE="$1"
    local STATUS="EMERGENCY"
    log_status "$MESSAGE" "$STATUS"
}

########################################
# 描述: 记录一条状态为“警报”的消息
# 参数: $1:要记录的消息
# 实例: log_alert <msg> 
########################################
log_alert() {
    local MESSAGE="$1"
    local STATUS="ALERT"
    log_status "$MESSAGE" "$STATUS"
}

########################################
# 描述: 记录一条状态为“关键”的消息
# 参数: $1:要记录的消息
# 实例: log_critical <msg> 
########################################
log_critical() {
    local MESSAGE="$1"
    local STATUS="CRITICAL"
    log_status "$MESSAGE" "$STATUS"
}
########################################
# 描述: 记录一条状态为“错误”的消息
# 参数: $1:要记录的消息
# 实例: log_error <msg> 
########################################
log_error() {
    local MESSAGE="$1"
    local STATUS="ERROR"
    log_status "$MESSAGE" "$STATUS"
}
########################################
# 描述: 记录一条状态为“警告”的消息
# 参数: $1:要记录的消息
# 实例: log_warning <msg> 
########################################
log_warning() {
    local MESSAGE="$1"
    local STATUS="WARNING"
    log_status "$MESSAGE" "$STATUS"
}
########################################
# 描述: 记录一条状态为“通知”的消息
# 参数: $1:要记录的消息
# 实例: log_notice <msg> 
########################################
log_notice() {
    local MESSAGE="$1"
    local STATUS="NOTICE"
    log_status "$MESSAGE" "$STATUS"
}
########################################
# 描述: 记录一条状态为“信息”的消息
# 参数: $1:要记录的消息
# 实例: log_notice <msg> 
########################################
log_info() {
    local MESSAGE="$1"
    local STATUS="INFO"
    log_status "$MESSAGE" "$STATUS"
}
########################################
# 描述: 记录一条状态为“调试”的消息
# 参数: $1:要记录的消息
# 实例: log_debug <msg> 
########################################
log_debug() {
    local MESSAGE="$1"
    local STATUS="DEBUG"
    log_status "$MESSAGE" "$STATUS"
}
########################################
# 描述: 记录一条状态为“正常”的消息
# 参数: $1:要记录的消息
# 实例: log_ok <msg> 
########################################
log_ok() {
    local MESSAGE="$1"
    local STATUS="OK"
    log_status "$MESSAGE" "$STATUS"
}
########################################
# 描述: 记录一条状态为“异常”的消息
# 参数: $1:要记录的消息
# 实例: log_not_ok <msg> 
########################################
log_not_ok() {
    local MESSAGE="$1"
    local STATUS="NOT_OK"
    log_status "$MESSAGE" "$STATUS"
}
########################################
# 描述: 记录一条状态为“失败”的消息
# 参数: $1:要记录的消息
# 实例: log_failed <msg> 
########################################
log_failed() {
    local MESSAGE="$1"
    local STATUS="FAILED"
    log_status "$MESSAGE" "$STATUS"
}
########################################
# 描述: 记录一条状态为“成功”的消息
# 参数: $1:要记录的消息
# 实例: log_success <msg> 
########################################
log_success() {
    local MESSAGE="$1"
    local STATUS="SUCCESS"
    log_status "$MESSAGE" "$STATUS"
}
########################################
# 描述: 记录一条状态为“已通过”的消息
# 参数: $1:要记录的消息
# 实例: log_passed <msg> 
########################################
log_passed() {
    local MESSAGE="$1"
    local STATUS="PASSED"
    log_status "$MESSAGE" "$STATUS"
}








__log_init__
















